package com.bank.daoimpl;

import com.bank.dao.AccountDao;
import com.bank.javabean.Account;
import com.bank.util.MyJDBCUtil;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @Auther: Liu
 */
public class AccountDaoImpl implements AccountDao {
    Class<Account> c=Account.class;
    /**
     * 添加数据方法
     *
     * @param account 添加的账号信息
     * @return 添加的条数
     */
    @Override
    public int insertAccount(Account account) {
        String sql="insert into account (username,password,name,mail,phone,type)values(?,?,?,?,?,?)";
        return MyJDBCUtil.dml(sql,account.getUsername(),account.getPassword(),account.getName(),account.getMail(),account.getPhone(),account.getType());
    }

    /**
     * 根据账号密码查询数据
     *
     * @param username 查询的账号
     * @param password 查询的密码
     * @return 返回结果集
     */
    @Override
    public ArrayList<Account> selectByUsernameAndPassword(String username, String password) {
        String sql="select * from account where username=? and password=?";
        return MyJDBCUtil.dql(c,sql,username,password);
    }

    /**
     * 根据id删除数据方法
     *
     * @param id 删除数据的主键id
     * @return 删除的条数
     */
    @Override
    public int deleteById(int id) {
        String sql="delete from account where id=?";
        return MyJDBCUtil.dml(sql,id);
    }

    /**
     * 根据id修改密码
     *
     * @param id       修改数据的id
     * @param password 修改后的密码
     * @return 修改的条数
     */
    @Override
    public int updatePasswordById(int id, String password) {
        String sql="update account set password=? where id=?";
        return MyJDBCUtil.dml(sql,password,id);
    }

    /**
     * 根据用户名查询数据
     *
     * @param username
     */
    @Override
    public ArrayList<Account> selectByUsername(String username) {
        String sql="select * from account where username=?";
        return MyJDBCUtil.dql(c,sql,username);
    }

    /**
     * 根据账号类型查询数据
     *
     * @param type
     */
    @Override
    public ArrayList<Account> selectByType(int type) {
        String sql="select * from account where type=?";
        return MyJDBCUtil.dql(c,sql,type);
    }

    /**
     * 根据id查询数据
     *
     * @param id
     */
    @Override
    public ArrayList<Account> selectById(int id) {
        String sql="select * from account where id=?";
        return MyJDBCUtil.dql(c,sql,id);
    }

    /**
     * 为指定账号 余额添加指定金额
     *
     * @param username
     * @param money
     */
    @Override
    public int updateAddMoney(String username, double money) {
        String sql="update account set money=money+? where username=?";
        return MyJDBCUtil.dml(sql,money,username);
    }

    /**
     * 为指定账号 余额减少指定金额
     *
     * @param username
     * @param money
     */
    @Override
    public int updateSubMoney(String username, double money) {
        String sql="update account set money=money-? where username=?";
        return MyJDBCUtil.dml(sql,money,username);
    }

    /**
     * 为指定账号 余额减少指定金额
     *
     * @param uname
     * @param tname
     * @param money
     * 转账设计到事务，怎么写
     */
    @Override
    public void updateMoneyToUsername(String uname, String tname, double money) {
        String sql1="update account set money=money-? where username=?";
        String sql2="update account set money=money+? where username=?";
        Connection con = MyJDBCUtil.getCon();
        try {
            MyJDBCUtil.dml(con,sql1,money,uname);
            MyJDBCUtil.dml(con,sql2,money,tname);
            con.commit();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            try {
                con.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }finally {
            MyJDBCUtil.close(null,null,con);
        }
    }
}
